package q201_rangeBitwiseAnd;

public class Solution_2 {
    /*
    计算两个整数之间所有数字按位与的结果
    问题变成：两个数字的公共前缀
    方法2：
    相较于方法1 这个就直观很多了
    直接两个边界都向左移 直到相等为止 并且记录移动次数

    最后将相等的数字再右移对应的次数
     */
    public int rangeBitwiseAnd(int left, int right) {
        int shift = 0;
        while (right != left) {
            right = right >> 1;
            left = left >> 1;
            shift++;
        }
        return right >> shift;
    }
}
